#!/usr/bin/env bash
#===========HEADER===========================================================|
#AUTOR
# Jefferson Rocha <lrcjefferson@gmail.com
#
#Instalador do shan.
#============================================================================|
readonly NAME="shan"
readonly VERSION="0.1beta"
bashrc="/home/${USER}/.bashrc"         # .bashrc do usuário
LIST=("wget" "grep" "md5sum" "tar")    # Ferramentas necessárias
DIRECTORYS=(                           # Lista de diretorios
      "/home/${USER}/shan/"
      "/home/${USER}/shan/core/"
      "/home/${USER}/shan/bin/"
      "/home/${USER}/shan/conf/"
      "/home/${USER}/shan/tmp/"
      "/home/${USER}/shan/modules/"
      "/home/${USER}/shan/trash/"
)
#===============================|

printf '%b' "Bem vindo! ao instalador do ${NAME} Versão ${VERSION}.\n"
printf '%b' "Vamos fazer alguns testes e conferências antes de começar a instalação!\n"

# Conferindo se o usuário tem o bash
# se não tiver tchau.
shell="bash"
printf '%b' "\n+++++++++++ Shell\n"
if ! type "${shell}" 1> /dev/null 2> /dev/null; then
   printf '%b' "ERRO! ${NAME} foi feito com base ao Shell Bash, você necessita dele para prosseguir\n"
   exit 1
else
   printf '%-50s[OK]\n' "${shell}"
fi

# O usuário possui todas ferramentas que o shan necessita?
# Se não ter já sabe.
printf '%b' "\n+++++++++++ Ferramentas\n"
for X in "${LIST[@]}"; do
   if type "${X}" 1> /dev/null 2> /dev/null; then
      printf '%-50s[OK]\n' "${X}"
   else
      printf '%-50s[OK]\n' "${X}"
      printf '%b' "Você necessita da ferramenta ${X} para prosseguir!\n"
      exit 1
   fi
done

# Verificação do .bashrc no HOME do usuário.
# se não existir crie.
printf '%b' "\n+++++++++++ Verificando o arquivo .bashrc em seu HOME\n"
if [ -e "$bashrc" ]; then
   printf '%-50s[EXIST]\n' "${bashrc}"
   bashok="1" # Var que confere na hora de enviar o PATH.
else
   printf '%b' " Criando arquivo .bashrc\n"
   if > "${bashrc}" 1> /dev/null 2> /dev/null; then
      printf '%-50s[OK]\n' "${bashrc}"
   else
      printf '%-50s[ERRO]\n' "${bashrc} não foi criado! saindo."
      exit 1
   fi
fi

# Enviando novo PATH
if [ "$bashok" -eq "1" ]; then
   printf "\n+++++++++++ Enviando PATH para .bashrc\n"
   printf "PATH=${PATH}:/home/${USER}/${NAME}/bin; export PATH\n" >> "$bashrc"
   printf "MODULE=/home/${USER}/${NAME}/modules; export MODULE\n" >> "$bashrc"
   printf '%-50s[OK]\n' "${bashrc}"
else
   printf "\n+++++++++++ Enviando PATH para .bashrc\n"
   printf "PATH=${PATH}:/home/${USER}/${NAME}/bin; export PATH\n" > "$bashrc"
   printf "MODULE=/home/${USER}/${NAME}/modules; export MODULE\n" > "$bashrc"
fi

# Criação de diretórios.
printf '%b' "\n+++++++++++ Criação dos diretórios necessários\n"
for DIR in "${DIRECTORYS[@]}"; do
   if [ ! -d "$DIR" ]; then
      if mkdir "${DIR}" 2> /dev/null; then
         printf '%-50s[OK]\n' "${DIR}"
      else
         printf '%-50s[ERRO]\n' "${DIR}"
         exit 1
      fi
   else
      printf '%-50s[EXIST]\n' "${DIR}"
   fi
done

# Enviando o executavel, conf, REPO para os seus quadrados!
printf "\n+++++++++++ Enviando arquivos para destino.\n"
DIR_MOVE="move"
LIST_MOVE=("shan.conf" "shan")
if [ ! -d "${DIR_MOVE}" ]; then
   printf '%-50s[ERRO]\n' "${DIR_MOVE} NÃO EXISTE!"
   exit 1
else
   ( # Subshell de leve!
     if ! cd "$DIR_MOVE"; then  # Entrando no diretorio
        printf '%-50s[ERRO]\n' "Houve um erro ao tentar entrar em: ${$DIR_MOVE}"
        exit 1
     fi
     if cp "${LIST_MOVE[0]}" "${DIRECTORYS[3]}"; then  # shan.conf
        printf '%-50s[OK]\n' "${LIST_MOVE[0]}"
     else
        printf '%-50s[ERRO]\n' "${LIST_MOVE[0]}"
        exit 1
     fi
     if cp "${LIST_MOVE[1]}" "${DIRECTORYS[2]}"; then  # shan
        printf '%-50s[OK]\n' "${LIST_MOVE[1]}"
     else
        printf '%-50s[ERRO]\n' "${LIST_MOVE[1]}"
        exit 1
     fi
   )
fi


# Chegou até aqui é só receber a taça!
printf "\nA INSTALAÇÃO do ${NAME} versão ${VERSION} FOI CONCLÚIDA com SUCESSO!\n"
printf "Execute ${NAME} para entrar no modo interativo... e execute o comando update.\n"
exit 0
